import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
import os

file_path = '信用卡精准营销模型.xlsx'

# 读取Excel文件
excel_file = pd.ExcelFile(file_path)
# 获取指定工作表中的数据
df = excel_file.parse('Sheet1')

# 一、数据处理
# 查看各列的描述性统计，重点关注是否有异常值
print('各列描述性统计：')
print(df.describe())

# 二、数据分析
# 分析不同性别在响应上的差异
gender_response = df.groupby('性别')['响应'].mean()
print('不同性别的响应比例：')
print(gender_response)

# 计算各特征与响应之间的相关性（保留两位小数）
correlation = df.corr()['响应'].round(2)
print('各特征与响应之间的相关性：')
print(correlation)

# 三、建模与模型评价
# 准备特征和目标变量
X = df.drop('响应', axis=1)
y = df['响应']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建逻辑回归模型并训练
model = LogisticRegression()
model.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = model.predict(X_test)

# 模型评价
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)

print('模型准确率：', accuracy)
print('模型精确率：', precision)
print('模型召回率：', recall)
print('模型F1分数：', f1)

# 四、可视化
# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['WenQuanYi Zen Hei']

# 绘制相关性热力图
plt.figure(figsize=(10, 8))
sns.heatmap(df.corr(), annot=True, cmap='coolwarm', fmt=".2f")
plt.title('Thermodynamic diagram')
plt.show()